

export default function createStore(reducer, initialState) {
    let state = initialState;
    const listeners = [];
    function getState() {
        return state;
    }

    function dispatch(action) {
        // 赋给新的状态
        let newState = reducer(state, action);
        // 当状态不相等的时候，才会去执行
        if (newState !== state) {
            state = newState;
            // 指定订阅的函数的回调
            listeners.forEach(fn => fn());
        }
        return action;
    }

    // 订阅函数 当状态发生变化时会触发订阅了的函数执行
    function subscribe(listener) {
        listeners.push(listener);
        return function unsubscribe() {
            // 进行过滤 从listeners中将该listener去掉
            listeners.filter(item => item !== listener);
        }
    }

    // 默认先派发一个action获取初始值
    dispatch('@@self-redux INIT');

    return {
        getState,
        dispatch,
        subscribe
    }
}